package com.zhongfl.crm.service.boss;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.github.pagehelper.PageInfo;
import com.zhongfl.crm.enums.boss.CommonLogType;
import com.zhongfl.crm.model.boss.CommonLog;

import java.beans.IntrospectionException;
import java.util.List;

public interface CommonLogService {

    /**
     * 添加有前后对比的日志
     *
     * @param type    类型
     * @param typeExt 子类型
     * @param key     数据Key
     * @param source  原始数据 只接受 Bean 对象
     * @param target  更改后数据 只接受 Bean 对象
     * @param user    操作人
     */
    void add(CommonLogType type, CommonLogType typeExt,
             String key, Object source,
             Object target,
             String user) throws JsonProcessingException, IntrospectionException;

    /**
     * 添加有前后对比的日志, 只对比有 {@see FieldMeta} 注解的字段
     *
     * @param type
     * @param typeExt
     * @param key
     * @param source
     * @param target
     * @param user
     * @throws JsonProcessingException
     * @throws IntrospectionException
     */
    void addWithFieldMeta(CommonLogType type, CommonLogType typeExt,
                          String key, Object source,
                          Object target,
                          String user) throws JsonProcessingException, IntrospectionException;


    /**
     * 添加自定义消息日志
     *
     * @param type    类型
     * @param typeExt 子类型
     * @param key     数据Key
     * @param source  原始数据 只接受 Bean 对象
     * @param user    更改后数据
     */
    void add(CommonLogType type,
             CommonLogType typeExt,
             String key,
             Object source,
             String user) throws JsonProcessingException, IntrospectionException;

    /**
     * 分页查询日志
     *
     * @param page     页数
     * @param pageSize 一页大小
     */
    PageInfo<CommonLog> findForPage(Integer page, Integer pageSize, Integer type, String key);

    PageInfo<CommonLog> findForPage(Integer page, Integer pageSize, Integer type, Integer typeExt, String key);

    /***
     * 根据订单号查询订单日志
     * @param key
     * @return
     */
    List<CommonLog> findOrderLog(String key);

    /**
     * 根据单号和类型查询
     *
     * @param key
     * @param type
     * @return
     */
    List<CommonLog> findByKeyAndType(String key, String type);

    List<CommonLog> findListByKeyAndType(String key, String typeExt);

    List<CommonLog> findByTypeExtAndKey(String key, String typeExt);
}
